home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / misc / amag / sh9301c.lha / Windows(S.106) / Listing2.txt < prev    next >
Text File  |  1992-11-20  |  6KB  |  166 lines

  1. #include <windows.h>
  2. #include <string.h>
  3.  
  4. char szAppName[20];   // Klassen-Name für dieses Window
  5. HWND hInst;           // Instanz-Handle
  6. HWND hWndMain;        // Window-Handle
  7.  
  8. // Prototypen (siehe unten)
  9. LONG FAR PASCAL WndProc(HWND, WORD, WORD, LONG);
  10. int nCwRegisterClasses(void);
  11. void CwUnRegisterClasses(void);
  12.  
  13.  
  14. int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
  15.                    LPSTR lpszCmdLine, int nCmdShow)
  16. {
  17.  /***************************************************
  18.   * Hier startet das Programm.                      *
  19.   * Diese Funktion wird nur von Windows aufgerufen! *
  20.   ***************************************************/
  21.  
  22.  MSG        msg;  // Message-Struktur
  23.  int        nRc;  // Return-Wert von RegisterClasses
  24.  
  25.  strcpy(szAppName, "Demo");
  26.  hInst = hInstance;
  27.  if(!hPrevInstance)
  28.    {
  29.     // Wenn es die erste Instanz ist, Klasse registrieren
  30.     if ((nRc = nCwRegisterClasses()) == -1)
  31.       {
  32.        // Wenn Fehler beim Registrieren
  33.        MessageBox(NULL, "Konnte Klase nicht registrieren",
  34.                   "Sorry", MB_ICONEXCLAMATION);
  35.        return nRc;
  36.       }
  37.    }
  38.  
  39.  // Klasse gibt es, also Window anlegen:
  40.  hWndMain = CreateWindow(
  41.              szAppName,         // Name der Applikation
  42.              "Text des Titels", // Das sog. Caption
  43.              WS_CAPTION      |  // Hat Titelleiste und
  44.              WS_SYSMENU      |  // System-Menü und
  45.              WS_MINIMIZEBOX  |  // Minimum-Box und
  46.              WS_MAXIMIZEBOX  |  // Maximum-Box und
  47.              WS_THICKFRAME   |  // Malt nicht in Child-Windows
  48.              WS_OVERLAPPED,     // Kann überlappen
  49.              CW_USEDEFAULT, 0,  // Default für links oben
  50.              CW_USEDEFAULT, 0,  // Default für rechts unten
  51.              NULL,              // Ist keine MDI-Applikation
  52.              NULL,              // Default ist Klassen-Menü
  53.              hInst,             // Instanz dieses Windows
  54.              NULL);             // Kein Struct für WM_CREATE
  55.  
  56.  
  57.  if(hWndMain == NULL)
  58.    {
  59.     MessageBox(NULL, "Konnte Window nicht anlegen",
  60.                "Sorry", MB_ICONEXCLAMATION);
  61.     return 1;
  62.    }
  63.  
  64.  ShowWindow(hWndMain, nCmdShow);     // Window anzeigen
  65.  
  66.  while(GetMessage(&msg, NULL, 0, 0)) // Endlos
  67.    {
  68.     TranslateMessage(&msg);              // Keys übersetzen
  69.     DispatchMessage(&msg);               // Message an WndProc
  70.  
  71.    }                                 // bis WM_Quit-Message
  72.  
  73.  // Rückzugsgefechte und Ende
  74.  CwUnRegisterClasses();
  75.  return msg.wParam;
  76. } //  End of WinMain
  77.  
  78.  
  79. /***********************************************
  80.  *                                             *
  81.  * WndProc (Main Window Procedure)             *
  82.  *                                             *
  83.  * Hierher sendet Windows Messages über alle   *
  84.  * Events, egal ob das User-Aktionen sind oder *
  85.  * Windows-Messages.                           *
  86.  ***********************************************/
  87.  
  88. LONG FAR PASCAL WndProc(HWND hWnd, WORD Message,
  89.                         WORD wParam, LONG lParam)
  90. {
  91.  HDC         hDC;    // Handle für Display-Device-Context
  92.  PAINTSTRUCT ps;     // Hält PAINT-Informationen
  93.  int         nRc=0;  // Return-Code
  94.  
  95.  switch (Message)
  96.    {
  97.     case WM_PAINT: // Neuzeichnen evtl. nötig
  98.          memset(&ps, 0x00, sizeof(PAINTSTRUCT));
  99.          hDC = BeginPaint(hWnd, &ps); // Melde Start
  100.          SetBkMode(hDC, TRANSPARENT); // Hintergrund löschen
  101.          TextOut(hDC, 20, 20, "Hallo Welt!", 11);
  102.          EndPaint(hWnd, &ps); // Melde, daß Painting fertig
  103.          break;
  104.  
  105.     case WM_CLOSE: // User schließt Window
  106.          DestroyWindow(hWnd);   // Window abbauen.
  107.          if (hWnd == hWndMain)  // Wenn es das letzte ist,
  108.            PostQuitMessage(0);  // Ende melden
  109.         break;
  110.  
  111.     default:
  112.          // Für alle Messages, die keine Service-Routine haben,
  113.          // Messages an Windows für Default-Prozess zurück:
  114.          return DefWindowProc(hWnd, Message, wParam, lParam);
  115.    }
  116.  return 0L;
  117. }     // End of WndProc
  118.  
  119. /*************************************************
  120.  *                                               *
  121.  * Generelle Funktion.                           *
  122.  *                                               *
  123.  * Registriert alle Klassen aller Windows,       *
  124.  * die zur Applikation gehören.                  *
  125.  * Return: 0, wenn erfolgreich, sonst Error-Code *
  126.  *                                               *
  127.  *************************************************/
  128.  
  129. int nCwRegisterClasses(void)
  130. {
  131.  WNDCLASS   wndclass; // Struct der Windowsklasse
  132.  memset(&wndclass, 0x00, sizeof(WNDCLASS));
  133.  
  134.  
  135.  // Stuktur laden:
  136.  wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_BYTEALIGNWINDOW;
  137.  wndclass.lpfnWndProc = WndProc;
  138.  // Kein Extra-Storage für Klassen- und Windows-Objekte:
  139.  wndclass.cbClsExtra = 0;
  140.  wndclass.cbWndExtra = 0;
  141.  wndclass.hInstance = hInst;
  142.  wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  143.  wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
  144.  // Brush für Hintergrund-Löschen anlegen:
  145.  wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  146.  wndclass.lpszMenuName = szAppName;  // Menü-Name = App.-Name
  147.  wndclass.lpszClassName = szAppName; // Klassen-Name = App.-Name
  148.  
  149.  return RegisterClass(&wndclass); // Registrieren
  150. } // End of nCwRegisterClasses
  151.  
  152. /********************************************
  153.  *  CwUnRegisterClasses-Funktion            *
  154.  *                                          *
  155.  *  Löscht alle Refrenzen zu den Resourcen  *
  156.  *  und alle Handles und gibt Speicher frei.*
  157.  ********************************************/
  158.  
  159. void CwUnRegisterClasses(void)
  160. {
  161.  WNDCLASS   wndclass;
  162.  memset(&wndclass, 0x00, sizeof(WNDCLASS));
  163.  
  164.  UnregisterClass(szAppName, hInst);
  165. }
  166.